\section{问题提出的背景}
\subsection{背景介绍}
在通讯技术的发展下，网络的带宽和时延都达到了能够支撑起实时的云端虚拟化应用的程度。现在已经出现了许多实际产业中的云端虚拟化技术的运用，例如基于瘦客户机的云端操作系统、云游戏等。但许多建立在 HTTP 协议上的框架在这种对时延和带宽要求较高的场合中不能充分发挥出较低层网络协议的效率。因为 HTTP 协议中仅允许客户端主动向服务器发起请求，所以在遇到服务器需要主动向客户端发送数据时只能使用轮询等方法，让客户端主动向服务器请求数据等待回应，从而增加了网络通讯的开销以及服务器的压力。这这使得我们有必要寻找出 HTTP 协议的替代品，来实现更小的额外开销以及提高通讯的实时性。

\par

此次的毕业设计项目选择了 WebSocket 技术来实现一个云端影响渲染服务器的网络接口的 Windows 版本。项目中需要使用到 Windows 下的相关网络 API 以及文件 I/O 基础设施，并通过现有的开源库和相关项目来实现安全网络传输等功能。

\subsubsection{WebSocket 技术}
WebSocket 技术作为一个区别于 HTTP 的应用层全双工计算机通信协议，在 2011 年以 RFC 6455 被 IETF 标准化 \cite{fette2011websocket}。相较于 HTTP 协议，WebSocket 对于建立的 TCP 连接的利用更加充分，服务器和客户端在最开始的握手阶段需要使用 HTTP 协议以建立起 WebSocket 连接，随后两者之间的全双工通信全部基于握手阶段建立的 TCP 连接实现。
WebSocket 能够使得客户端与服务器之间的通讯更为轻量，不需要每次都进行繁琐的连接建立过程。

\par

WebSocket 通信是通过和 HTTP 相同的 TCP 端口实现的（经过 TLS 的加密通信则为和 HTTPS 相同的 443 端口），这使得 WebSocket 连接不容易被防火墙所阻拦。

\subsubsection{I/O 完成端口}
本项目旨在为 Windows 平台上的 WebSocket 服务器/客户端提供一套即开即用的框架。考虑到服务器的性能，我们决定使用 Windows 平台上性能最强的服务器 I/O 框架、 I/O Completion Port (I/O 完成端口)。I/O 完成端口为在多核处理器上处理多重异步 I/O 提供了一种高效的线程调度模型 \cite{iocp} ，当进程创建了一个 I/O 完成端口后，系统会为其创建一个关联的队列对象来处理完成端口上的请求。

\par

通过 I/O 完成端口的相关 API，进程可以预先建立起线程池来高效地处理大量并行的异步 I/O 请求，从而提升服务器的效率。

\subsubsection{WebSocket 安全通信}
类似于 HTTP，WebSocket 也可以通过 TLS (Transport Layer Security) 来对通信进行加密，使用和 HTTPS 相同的 443 端口。安全传输层协议的主要目的是在两个或多个通信计算机应用程序之间提供隐私和数据完整性，即能够保证数据在传输过程中不会泄露和不被篡改。TLS 当前版本 1.3 在 2018 年由 RFC 8446 所定义 \cite{rfc8446}。
\par
相较于直接使用 WebSocket 协议，使用 WebSocket Secure 能够在享受 TLS 所提供的安全性以外、避免在使用所谓的中介（代理，缓存，防火墙）网络上出现 WebSocket 可用性问题。

\subsection{项目提出的原因}
本项目的提出基于如下的实际生产需求：在局域网中运行的医学影像渲染系统，服务器需要在接收到用户请求后对模型数据进行渲染，并将结果即时发送回用户（用户规模大致为数十至上百）。考虑到平台兼容性以及渲染硬件的兼容性，我们有必要实现在 Windows 上的配套系统，并利用 Windows 提供的 I/O 完成端口来实现高性能的提供异步 I/O 操作的服务器应用程序。
\par
同时由于渲染服务器可能对于 CPU、内存等资源要求较高，提供给服务器相应的资源也会极其有限，所以在这种场合下，设计出在维持大量客户端 WebSocket 连接的情况下 CPU 资源占用尽量少的服务器框架是非常有实际意义的，而类似的其它应用程序云端化也能通过此项目进行一定程度上的探索。

\subsection{本研究的意义和目的}

本研究的意义在于提供一种可能的上述医学影像渲染系统中的 Windows 端服务器实现，同时可以探讨，在当前的技术背景下，应用程序的云端化能够通过 WebSocket 达到多大的性能提升，以及相应的开发难度和维护难度。同时本研究针对的是 Windows 平台上的实现，所以同样也会对 Windows 平台上的异步 I/O 框架 IOCP 进行深入的探究，并设计抽象程度高，易用的 API，降低类似于此场景的重型应用程序向云端迁移的成本。

\par

考虑到已有的相关 WebSocket 开源项目的 Windows 实现可能都相对过于复杂难以进行个性化修改，或是依赖的相关技术已经过时并产生可能的历史遗留问题，本研究也可以提供一种相对简洁的 WebSocket 服务器设计方案，供相关技术的开发者参考。